package com.kpmg.datalake.vbaapi.service;

import com.alibaba.fastjson.JSONObject;
import com.kpmg.datalake.accountcheck.vo.AccountQueryVO;
import com.kpmg.datalake.common.model.DimInfo;
import com.kpmg.datalake.common.model.OptionDataModel;
import com.kpmg.datalake.common.vo.ServerResponse;
import com.kpmg.datalake.db.model.SysUsrOption;
import com.kpmg.datalake.vbaapi.vo.VbaParamsDTO;
import com.kpmg.datalake.vbaapi.vo.VbaReportOptionVO;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * VBA可视化后端功能Service
 *
 * @author timqian
 * @author alxe [alex.zhao@kpmg.com]
 */
public interface VbaVisualService {


  /**
   * 初始化客户名称
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  ServerResponse<VbaReportOptionVO<DimInfo>> initCorp(VbaParamsDTO vbaParamsDTO);

  /**
   * 初始化报告日期范围
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  ServerResponse<ArrayList<VbaReportOptionVO<JSONObject>>> initReportDate(
      VbaParamsDTO vbaParamsDTO);

  /**
   * 初始化部门
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  //ServerResponse<VbaReportOptionVO<DimInfo>> initDept(VbaParamsDTO vbaParamsDTO);

  /**
   * 初始化交易对手
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  //ServerResponse<VbaReportOptionVO<DimInfo>> initCst(VbaParamsDTO vbaParamsDTO);

  /**
   * 初始化组团
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  //ServerResponse<VbaReportOptionVO<DimInfo>> initPrj(VbaParamsDTO vbaParamsDTO);

  /**
   * 查询默认报表(多维报表)
   *
   * @param reportCondition 默认报表条件
   * @return ServerResponse
   */
//  ServerResponse<ArrayList<Map<String, Object>>> queryDefaultReport(
//      ReportCondition reportCondition);

  /**
   * 根据用户名和项目id查询账套信息
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse<VbaReportOptionVO>
   */
  ServerResponse<VbaReportOptionVO<JSONObject>> queryAllBookSet(VbaParamsDTO vbaParamsDTO);

  /**
   * 根据账套、起止日期等条件查询报表数据
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  ServerResponse<ArrayList<Map<String, Object>>> querySubBalanceAccount(VbaParamsDTO vbaParamsDTO);

  /**
   * 初始化组团
   *
   * @param vbaParamsDTO VBA参数对象
   * @return ServerResponse
   */
  ServerResponse<ArrayList<Map<String, Object>>> getTimeAccount(VbaParamsDTO vbaParamsDTO);

  /**
   * 获取报告的默认选项
   *
   * @param projectId
   * @param reportId
   * @return ServerResponse
   */
  ServerResponse<HashMap<String, Object>> getReportDefaultSelections(String projectId,
      String reportId);

  /**
   * @param optionData optionData
   * @return ServerResponse
   */
  ServerResponse<String> saveOptionData(final OptionDataModel optionData);

  /**
   * @param vbaParamsDTO vbaParamsDTO
   * @return ServerResponse
   */
  ServerResponse<ArrayList<SysUsrOption>> queryDefaultOptionData(VbaParamsDTO vbaParamsDTO);

  /**
   * 查询多维报表
   *
   * @param reportCondition 分析报表条件
   * @return ServerResponse
   */
//  ServerResponse<ArrayList<Map<String, Object>>> searchReport(ReportCondition reportCondition);

  /**
   * 根据用户名/项目Id和对应报告的参数,获得内部对账数据
   *
   * @param accountQueryVO 报告的条件
   * @param num 用户分页
   * @return ServerResponse
   */
  ServerResponse<JSONObject> getChkAccountData(AccountQueryVO accountQueryVO, int num);
}
